package com.sgb.kjwl.api.service;

import com.sgb.kjwl.model.BalanceDetailsEntity;
import com.sgb.kjwl.model.BindBankCardListEntity;
import com.sgb.kjwl.model.BindEnterpriseBankEntity;
import com.sgb.kjwl.model.PayFlowStatisticsEntity;
import com.sgb.kjwl.model.QRcodeEntity;
import com.sgb.kjwl.model.entity.BannerEntity;
import com.sgb.kjwl.model.entity.BusinessInfoByCompanyEntity;
import com.sgb.kjwl.model.entity.CapitalEntity;
import com.sgb.kjwl.model.entity.CompanyDetailsEntity;
import com.sgb.kjwl.model.entity.ConcreteDetailEntity;
import com.sgb.kjwl.model.entity.ConcreteParamEntity;
import com.sgb.kjwl.model.entity.GoodsFilterEntity;
import com.sgb.kjwl.model.entity.GoodsSkuDetailEntity;
import com.sgb.kjwl.model.entity.InformationEntity;
import com.sgb.kjwl.model.entity.MaterialCompanyEntity;
import com.sgb.kjwl.model.entity.MaterialDetailEntity;
import com.sgb.kjwl.model.entity.MaterialListEntity;
import com.sgb.kjwl.model.entity.MaterialMapEntity;
import com.sgb.kjwl.model.entity.MaterialMenuEntity;
import com.sgb.kjwl.model.entity.shopping.SearchTagEntity;
import com.sgb.kjwl.model.entity.supplier3.DictEntity3;
import com.swgk.core.base.model.factory.BaseUrlInterceptor;
import com.swgk.core.view.entity.MenuEntity;
import com.sgb.kjwl.model.entity.SearchMaterialEntity;
import com.sgb.kjwl.model.entity.SearchMaterialEntity3;
import com.sgb.kjwl.model.entity.SupplierEntity;
import com.sgb.kjwl.model.entity.request.MaterialFilterJson3;
import com.sgb.kjwl.model.entity.shopping.PayCardEntity;
import com.swgk.core.base.model.entity.ListResponse;
import com.swgk.core.base.model.entity.BaseEntity;

import java.util.List;
import java.util.Map;

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;

/**
 * @author zhaotao
 * 时间：2019.08.14
 * 描述：商品材料接口
 */
public interface MaterialAPI {

    /**
     * 材料列表的筛选条件获取(一级和二级条件筛选项、类别和品名)
     *
     * @param areaCode
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/filter")
    Call<BaseEntity<List<GoodsFilterEntity<List<GoodsFilterEntity>>>>> getMaterialCategoryFilter(@Field("areaCode") String areaCode);

    /**
     * 材料列表的筛选条件获取(所有三级条件的筛选项、仓储地区、材质、规格、品牌等)入参：categoryNo类别  typeNo品名
     *
     * @param areaCode
     * @param categoryNo
     * @param typeNo
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/filter")
    Call<BaseEntity<List<GoodsFilterEntity<List<GoodsFilterEntity>>>>> getMaterialFilter(@Field("areaCode") String areaCode, @Field("categoryNo") String categoryNo, @Field("typeNo") String typeNo);

    /**
     * 获取材料的筛选列表(入参Map中包含areaCode，typeNo，CategoryNo，attrList（no、value）)
     *
     * @param page
     * @param limit
     * @param priceSort
     * @param map
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/filterList")
    Call<BaseEntity<ListResponse<List<MaterialListEntity>>>> getMaterialFilterList(@Query("page") int page, @Query("limit") int limit, @Query("priceSort") int priceSort, @Body Map map);

    /**
     * 材料列表
     *
     * @param map
     * @return
     */
    @POST("v1/app/material/queryMaterialByCategory")
    Call<BaseEntity<ListResponse<List<SearchMaterialEntity>>>> getMaterialList(@Body Map map);

    /**
     * 材料页面banner
     *
     * @return
     */
    @POST("v1/app/material/bannerList")
    Call<BaseEntity<List<BannerEntity>>> getBannerList();

    /**
     * 首页推荐分类
     *
     * @param map
     * @return
     */
    @POST("v1/app/material/buyer/recommendCategory")
    Call<BaseEntity<List<MenuEntity>>> getItemCatList(@Body Map map);

    /**
     * 材料页面商品推荐分类
     *
     * @param areaCode
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/recommendList")
    Call<BaseEntity<List<MaterialMenuEntity>>> getRecommendList(@Field("areaCode") String areaCode);

    /**
     * 根据分类查询指定材料信息
     *
     * @param cid1
     * @param areaCode
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/queryMaterailList")
    Call<BaseEntity<List<MaterialListEntity>>> queryMaterailList(@Field("cid1") String cid1, @Field("areaCode") String areaCode);

    /**
     * 材料页面供应商
     *
     * @param areaCode
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/goodSupplier")
    Call<BaseEntity<List<SupplierEntity>>> getGoodSupplier(@Field("areaCode") String areaCode);

    /**
     * 材料页面平台咨询
     *
     * @param areaCode
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/queryListByType")
    Call<BaseEntity<List<InformationEntity>>> queryListByType(@Field("areaCode") String areaCode);

    /**
     * 材料检索热词
     *
     * @return
     */
    @POST("v1/app/material/hotWord")
    Call<BaseEntity<List<String>>> getHotWord();


    /**
     * 材料详情
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/detail")
    Call<BaseEntity<MaterialDetailEntity>> getMaterialDetail(@Field("id") String id);

    /**
     * 材料详情 sku
     *
     * @param id
     * @param skuid
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/detail")
    Call<BaseEntity<GoodsSkuDetailEntity>> getSkuDetail(@Field("id") String id, @Field("skuid") String skuid);

    /**
     * 店铺详情
     *
     * @param id
     * @return
     */
    @GET("v1/app/material/shopDetail/{id}")
    Call<BaseEntity<MaterialCompanyEntity>> getMaterialShopDetail(@Path("id") String id);

    /***
     * 供应商详情
     */
    @GET("v1/app/user/goods/enquiry/getGoodsCompanyInfoDetailsFront")
    Call<BaseEntity<CompanyDetailsEntity>> getGoodsCompanyInfoDetailsFront(@Query("companyId") String companyId);

    /***
     * 询价获取品牌
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/enquiry/supplierGetItemBrand")
    Call<BaseEntity<CompanyDetailsEntity>> getSupplierGetItemBrand(@Field("cid") String id);

    /***
     * 询价获取属性
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/enquiry/supplierGetItemBrand2")
    Call<BaseEntity<CompanyDetailsEntity>> getSupplierGetItemAttributes(@Field("cid") String id);

    /**
     * 店铺相关产品列表
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/queryShopGoods")
    Call<BaseEntity<List<MaterialListEntity>>> getMaterialShopGoods(@Field("shopId") String id);

    /**
     * 商砼详情（购物车进入）
     *
     * @param id
     * @return
     */
    @POST("v1/app/material/concreteDetail")
    Call<BaseEntity<ConcreteDetailEntity>> getConcreteDetail(@Query("id") String id);

    /**
     * 商砼详情（筛选列表进入）
     *
     * @param id
     * @param strengthId
     * @param gradationId
     * @param serviceId
     * @return
     */
    @POST("v1/app/material/concreteDetail")
    Call<BaseEntity<ConcreteDetailEntity>> getConcreteDetail(@Query("id") String id, @Query("strengthId") String strengthId, @Query("gradationId") String gradationId, @Query("serviceId") String serviceId);

    /**
     * 商砼根据参数获取单价
     *
     * @param entity
     * @return
     */
    @POST("v1/app/material/getConcretePrice")
    Call<BaseEntity<ConcreteParamEntity>> getConcretePrice(@Body ConcreteParamEntity entity);

    /**
     * 商砼加入购物车
     *
     * @param entity
     * @return
     */
    @POST("v1/app/user/cart/addCartConcrete")
    Call<BaseEntity<String>> addConcreteCart(@Body ConcreteParamEntity entity);

    /**
     * 首页推荐菜单
     *
     * @return
     */
    @POST("v1/app/material/buyer/recommendMenu")
    Call<BaseEntity<List<MenuEntity>>> recommendMenu();

    /**
     * 首页推荐菜单recommendMenuNew
     *
     * @return
     */
    @GET("v1/app/material/buyer/recommendMenuNew")
    Call<BaseEntity<List<MenuEntity>>> recommendMenuNew();

    /**
     * 地图查找
     *
     * @param map
     * @return
     */
    @POST("v1/app/material/buyer/mapSearch")
    Call<BaseEntity<ListResponse<List<MaterialMapEntity>>>> mapSearch(@Body Map map);

    /**
     * 获取工程材料列表(现在商品列表)
     *
     *
     *
     * @param materialFilterJson
     * @return
     */
    @POST("v1/app/material/buyer/goodsList")
    Call<BaseEntity<ListResponse<List<SearchMaterialEntity3>>>> getMaterialList3(@Body MaterialFilterJson3 materialFilterJson);

    /**
     * 商品全部模块列表
     *
     * @param materialFilterJson
     * @return
     */
    @POST("v1/app/power/firstPageGoods")
    Call<BaseEntity<ListResponse<List<SearchMaterialEntity3>>>> getFirstPageGoods(@Body MaterialFilterJson3 materialFilterJson); //商品全部模块列表


    /**
     * 获取用户开户信息审核状态
     *
     * @return
     */
    @GET("app/business/getProcess")
    Call<BaseEntity<CapitalEntity>> getProcess();

    /**
     * 获取企业联动商户信息
     *
     * @return
     */
    @POST("app/business/getBusinessInfoByCompany")
    Call<BaseEntity<BusinessInfoByCompanyEntity>> getBusinessInfoByCompany();

    /**
     * 获取流水统计
     *
     * @param month
     * @return
     */
    @GET("app/payFlow/getPayFlowStatistics/{month}")
    Call<BaseEntity<PayFlowStatisticsEntity>> getPayFlowStatistics(@Path("month") String month);

    /**
     * 绑定企业对公结算账户
     *
     * @param map
     * @return
     */
    @Deprecated
    @POST("app/bind/bindEnterpriseBank")
    Call<BaseEntity<BindEnterpriseBankEntity>> bindEnterpriseBank(@Body Map map);

    /**
     * 获取绑定结算账户列表
     *
     * @return
     */
    @Deprecated
    @GET("app/bind/getBindBankCardList")
    Call<BaseEntity<List<BindBankCardListEntity>>> getBindBankCardList();

    /**
     * 余额提现
     *
     * @param map
     * @return
     */
    @Deprecated
    @POST("app/withdrawal/apply")
    Call<BaseEntity> apply(@Body Map map);

    /**
     * 获取快捷支付卡列表
     *
     * @return
     */
    @GET("app/payBankCard/list/quick")
    Call<BaseEntity<List<PayCardEntity>>> getQuick();

    /**
     * 获取流水详情
     *
     * @param flowType
     * @param flowNo
     * @return
     */
    @Deprecated
    @GET("app/payFlow/getPayFlowDetails/{flowType}/{flowNo}")
    Call<BaseEntity<BalanceDetailsEntity>> getPayFlowDetails(@Path("flowType") String flowType, @Path("flowNo") String flowNo);

    /**
     * 快捷支付申请验证码
     *
     * @param map
     * @return
     */
    @Deprecated
    @POST("app/pay/quickPayOrderApply")
    Call<BaseEntity> quickPayOrderApply(@Body Map map);

    /**
     * 商品首页行业分类
     *
     * @return
     */
    @POST("v1/app/material/buyer/getIndustryList")
    Call<BaseEntity<List<MenuEntity>>> getIndustryList();

    /**
     * 获取个人联动商户信息
     *
     * @return
     */
    @Deprecated
    @POST("app/business/getBusinessInfoByUser")
    Call<BaseEntity<BusinessInfoByCompanyEntity>> getBusinessInfoByUser();

    /**
     * 生成收款二维码
     *
     * @param entity
     * @return
     */
    @Deprecated
    @POST("app/pay/receiveQRcode")
    Call<BaseEntity<QRcodeEntity>> receiveQRcode(@Body QRcodeEntity entity);

    /**
     * 轮询查询交易是否支付完成
     *
     * @param tradeNo
     * @return
     */
    @Deprecated
    @POST("app/pay/queryPayState/{tradeNo}")
    Call<BaseEntity> queryPayState(@Path("tradeNo") String tradeNo);

    /**
     * 商品 品牌
     *
     * @param areaCode
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/buyer/brandChoose")
    Call<BaseEntity<List<DictEntity3>>> getBrandChoose(@Field("areaCode") String areaCode, @Field("id") String id);

    /**
     * 热门搜索标签
     *
     * @param limit
     * @param page
     * @return
     */
    @GET("v2/app/index/getPopularSearchTerms")
    Call<BaseEntity<ListResponse<List<SearchTagEntity>>>> getPopularSearchTerms(@Query("limit") String limit, @Query("page") String page);

    //会员经营-获取审批流程状态
    @Headers({BaseUrlInterceptor.HEADERS_URL_MEMBER, "tokenType:pc"})
    @GET("v1/app/user/member/getProcessStatus")
    Call<BaseEntity<Object>> getProcessStatus(@Query("companyNo") String companyNo, @Query("approveType") String approveType);

}
